package com.catazzz.springbootstudy.common.task;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @作者: Tao
 * @日期: 2025/1/9
 * @时间: 09:29
 * @描述: 配置Quartz调度器的配置类 <br><pre>
 */
//@Configuration
public class QuartzConfig {

    /**
     * 创建并配置一个JobDetail bean
     * JobDetail定义了需要执行的作业的详细信息，包括作业的名称、组以及是否持久化等信息
     *
     * @return 返回一个配置好的JobDetail对象，代表待执行的作业
     */
    @Bean
    public JobDetail myJobDetail() {
        // 使用JobBuilder构建一个新的Job，并指定作业的实现类为MyJob
        return JobBuilder.newJob(MyJob.class)
                // 为作业指定一个唯一的标识符（名称和组）
                .withIdentity("myJobDetail", "myJobDetailGroup")
                // 设置作业可以被持久化
                .storeDurably()
                .build();
    }

    /**
     * 创建并配置一个Trigger bean
     * Trigger定义了作业的触发条件，包括触发器的名称、组、启动时机以及调度计划等信息
     *
     * @return 返回一个配置好的Trigger对象，代表作业的触发器
     */
    @Bean
    public Trigger myTrigger() {
        // 使用TriggerBuilder构建一个新的触发器
        return TriggerBuilder.newTrigger()
                // 指定它所关联的作业为myJobDetail
                .forJob(myJobDetail())
                // 为触发器指定一个唯一的标识符（名称和组）
                .withIdentity("myJobTrigger", "myJobTriggerGroup")
                // 触发器立即启动
                .startNow()
                // 按照指定的Cron表达式进行调度
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();
    }
}

